// 用户集合规则模块

// 引入mongoose数据处理模块
const mongoose = require('mongoose');

// 创建集合规则
const userSchema = new mongoose.Schema({
    name: {
        type: String,
        minlength: [2, '请传入至少两个字符长度的名字！'],
        required: [true, '名字是必填项'],
        trim: true,
        validate: {
            validator: v => {
                let regex = /^[\u4E00-\u9FA5A-Za-z0-9_]+$/;
                // 返回布尔值
                // true 验证成功
                // false 验证失败
                // v 要验证的值
                return v.match(regex);
            },
            // 自定义错误信息
            message: '传入的名字不合法！'
        }
    },
    age: {
        type: Number,
        min: [1, '年龄至少是1岁！'],
        max: [150, '年龄不得大于150岁！'],
        required: [true, '年龄是必填项！'],
        trim: true
    },
    hobbies: {
        type: [String]
    },
    email: {
        type: String,
        required: [true, '邮箱是必填项！'],
        trim: true,
        validate: {
            validator: v => {
                let regex = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
                // 返回布尔值
                // true 验证成功
                // false 验证失败
                // v 要验证的值
                return v.match(regex);
            },
            // 自定义错误信息
            message: 'email不合法！'
        }
    },
    password: {
        type: String,
        minlength: [8, '密码最少要8位！'],
        maxlength: [18, '密码最多18位！'],
        validate: {
            validator: v => {
                let regex = /^[a-zA-Z][A-Za-z0-9._]{7,17}$/;
                // 返回布尔值
                // true 验证成功
                // false 验证失败
                // v 要验证的值
                return v.match(regex);
            },
            // 自定义错误信息
            message: '密码格式不合法！'
        }
    }
});

// 引用规则
const User = mongoose.model('User', userSchema);

// 导出规则
module.exports = User;